//package com.pkx.guide.task;
//
//import com.pkx.guide.info.entity.ProducerQest;
//import com.pkx.guide.info.entity.TInfoNetworkConfig;
//import com.pkx.guide.info.service.TInfoGuideStatusService;
//import com.pkx.guide.info.service.TInfoNetworkConfigService;
//import com.pkx.guide.qianfeng.service.QianFengSocketService;
//import jakarta.annotation.Resource;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.context.annotation.Bean;
//import org.springframework.stereotype.Component;
//
//import java.net.Socket;
//import java.nio.charset.StandardCharsets;
//import java.util.concurrent.ArrayBlockingQueue;
//import java.util.concurrent.BlockingQueue;
//import java.util.concurrent.CompletableFuture;
//
//@Slf4j
//@Component
//public class ProducerConsumerDemo {
//
//    private final BlockingQueue<ProducerQest> dataQueue = new ArrayBlockingQueue<>(1);
//
//    @Resource
//    private TInfoGuideStatusService tInfoGuideStatusService;
//    @Resource
//    private QianFengSocketService qianFengSocketService;
//    @Resource
//    private TInfoNetworkConfigService infoNetworkConfigService;
//
//    // 1. 定义线程变量，记录消费者线程
//    private Thread consumerThread;
//    //全局变量
//    private static Socket socket;
//    // 2. 初始化时调用一次，或在第一次生产数据时调用
//    // 修改后的消费者启动方法
//    @Bean
//    private void startConsumer() {
//        if (consumerThread == null || !consumerThread.isAlive()) {
//            synchronized (this) {
//                if (consumerThread == null || !consumerThread.isAlive()) {
//                    consumerThread = new Thread(() -> {
//                        try {
//                            // 初始化连接
//                            checkQianFengDeviceAndPublish();
//                            log.info("Socket连接初始化成功");
//
//                            while (!Thread.currentThread().isInterrupted()) {
//                                try {
//                                    ProducerQest qest = dataQueue.take();
//                                    log.info("获取到ProducerQest任务: {}",
//                                            qest.getTask() != null ? qest.getTask().getId() : "unknown");
//                                    handleProducer(qest);
//                                } catch (InterruptedException ie) {
//                                    Thread.currentThread().interrupt();
//                                    log.info("消费者线程被中断");
//                                    break;
//                                } catch (Exception e) {
//                                    log.error("处理任务时发生异常: ", e);
//                                    // 继续处理下一个任务
//                                }
//                            }
//                        } catch (Exception e) {
//                            log.error("消费者线程初始化失败: ", e);
//                        }
//                    }, "Producer-Consumer-Thread");
//
//                    consumerThread.setDaemon(true);
//                    consumerThread.start();
//                    log.info("消费者线程启动成功");
//                }
//            }
//        }
//    }
//
//
//
//
//    //创建前的线程执行一次
//    private void checkQianFengDeviceAndPublish() throws Exception {
//        TInfoNetworkConfig networkConfig = infoNetworkConfigService.selectByGuideType(1);
//         socket = qianFengSocketService.create(networkConfig.getIp(),networkConfig.getPort());
//
//        return;
//
//    }
//
//
//
//
//    // 处理业务的方法
//    private void handleProducer(ProducerQest qest) throws Exception {
//        try {
//            String ipList = qest.getIpList();
//            int ipListSize = qest.getIpListSize();
//            byte[] params = ipList.getBytes(StandardCharsets.UTF_8);
//            socket.setSoTimeout(2000);
//            qianFengSocketService.send(params, socket);
//            socket.setSoTimeout(ipListSize*2000);
//            byte[] resultArr = qianFengSocketService.receive(socket);
//            String result = new String(resultArr, StandardCharsets.UTF_8).trim();
//
//            // 更新状态
//            tInfoGuideStatusService.updateGuideStatus(result);
//
////            // 总是返回结果
////            CompletableFuture<String> future = qest.getCompletionFuture();
////            if (future != null && !future.isDone()) {
////                future.complete(result);
////            }
//
//        } catch (Exception e) {
//            // 总是返回异常
//            CompletableFuture<String> future = qest.getCompletionFuture();
//            if (future != null && !future.isDone()) {
//                future.completeExceptionally(e);
//            }
//            throw e;
//        }
//    }
//
//}